<?php
/** simplifica el uso de DialogBoxes en la aplicacion Yii.
 * 
 * uso:
 * 1-poner un icono para lanzar el dialogo, y seleccionar un ID del input element que recibir� la respuesta:
 * (ejemplo, en el form PersonRegister.php )
 * <code>
		<?php DialogBox::createDialogBox(
					 $this
					,"zipFinderDialog"
					,"Zipcode Finder"
					,"zipfinder/index"
					,"Person_zipcode"
					,"iconoComando imagenBuscar"
				); 
		?>
	</code>
 * 2-cuando se requiera cerrar el dialogo y devolver un valor:
 * (ejemplo, en el actionFinish de zipCodeFinder)
 * 
 * DialogBox::closeDialogBox($model->zipcode,'index.php?r=zipfinder/index');
 * 
 * 3-listo. cuando el action finalice su secuencia pasara el model->zipcode al 
 * input 'Person_zipcode' y cerrara el dialogbox automaticamente, antes 
 * reiniciando el action a 'index.php?r=zipfinder/index' (sino el action 
 * se quedar� pegado en el ultimo estado)
 * 
 * @author christian salazar (master@ascinformatix.com)
 * 
 */
class DialogBox {
	
				
		public static function createDialogBox(
			 $this_
			,$dialogName
			,$dialogTitle
			,$dialogInitAction
			,$idInputElement
			,$iconClass
			,$w
			,$h
			)
		{
			$timer = "timer".$dialogName;
			
			echo "\t<div>";
                        echo CHtml::button('Add Customer',array('class'=>'getCust','id'=>'getCust','onclick'=>"{ $('#$dialogName').dialog('open');
				$timer();}"));
                        echo"</div>\n";
			
				
			self::putDialog($this_
				,$dialogName
				,$dialogTitle
				,$dialogInitAction
				,true
				,$w
				,$h
			);

			
			self::defineTimerParaCierreDeDialogo($dialogName,$idInputElement);
			
		}
		
		
		public static function closeDialogBox($value,$actionResetTo,$quotation_no)//,$actionResetTo)
		{
                    echo "<script>
                            if(window.frameElement != null)
                                window.frameElement.value='$value';
                        document.location.href='$actionResetTo';
                    </script>";
		}

		
		
		/* crea un dialogo jquery con un IFRAME dentro
		 * el cual contendr� el action a ejecutar y que a su vez
		 * servira como PUENTE para trasmitir el resultado
		 * del dialogo mediante el atributo IFRAME.VALUE
		 * el cual ser� establecido por el action mediante
		 * DialoxBox::closeDialogBox.
		 * 
		 */
		private static function putDialog($this_,$dialogName,$title
			,$iframeActionSource
			,$modal=true,$w,$h)
		{
			$js='app'.$dialogName;
			$dialog = $dialogName;
			$iframeId = 'iframe'.$dialogName;
			$divForForm = "divForForm-$dialogName";
			
			$this_->beginWidget('zii.widgets.jui.CJuiDialog', array(
			    'id'=>$dialog,
			    'options'=>array(
			        'title'=>$title,
			        'autoOpen'=>false,
			        'modal'=>$modal,
                                'resizable'=> false,
			        'width'=>$w,
			        'height'=>$h,
			    ),
			));
			$temp="?r=";
			$src = Yii::app()->baseUrl."".$temp."".$iframeActionSource;

			/* .iframeDialogBg y .iframeDialog  esta en iframe.css
			 * 
			 */
			$iframe = "<iframe value='0' width='450px' height='450' class='iframeDialog' id='$iframeId' frameborder='0' scrolling='no' src='$src'></iframe>";
									
			echo "<div class='iframeDialogBg'>\n\t\t$iframe\n\t</div>\n";
			$this_->endWidget();
		}
		
		
		/* es un timer que se ejecuta cuando se abre el dialogo jquery.
		 * 
		 * se mantiene revisando por cambios de valor en el iframe.value
		 * este valor (iframe.value) es establecido por el script que usa
		 * el iframe, en el caso de zipcodefinder es el boton Finish. 
		 * 
		 * cuando este valor pasa de null o undefined a tener un valor
		 * distinto entonces cierra el dialogo jquery, establece
		 * al INPUT con ID $idInputElement al valor devuelto.
		 */

		private static function defineTimerParaCierreDeDialogo($dialogName,$idInputElement)
		{
			$timer = "timer".$dialogName;
			$iframe = "iframe".$dialogName;
			
			echo "\n";
			echo "<!-- timer de escucha de respuesta del dialogo '$dialogName'  -->";
			echo "\n";
			echo "<script>\n";
			echo "function addItem(){

			        $('#customer_dialog').dialog('close');
			        var tempQuoNo=$('#tempQuoNo').val();
			        var customer=$('#customerPick').val();
			        
			        var matches = customer.match(/\b(\w)/g);
			        var tempCustomer = matches.join('');

			        tempQuoNo=tempQuoNo.replace('?',tempCustomer.toUpperCase());
			        $('#quotation_no').val(tempQuoNo);
			        $('#customer1').val(customer);
		        }";
			
			echo "function $timer(){
					var x = document.getElementById('$iframe');
					var result = x.value;
					if(!(result == null || result == 'undefined')){
						// hay valor definido
						document.getElementById('$idInputElement').value = result;
						// cierra el dialogo
						$('#$dialogName').dialog('close');
						addItem();
						x.value = null;
						return;							
					}
					setTimeout($timer,100);
				}</script>\n\n";
		}
		
}